#ifndef	_header_h_
#define	_header_h_

//#include <reg51.h>
#include   "intrins.h"
#include	"STC8G.h"
#include 	<stdio.h>
#include	"eeprom.h"
#include    "Key.h"


#define		uchar	unsigned	char 
#define		uint	unsigned	int
#define		ulong	unsigned	long 
//#define		ufloat	unsigned	float





//=============== MCU资源定义 =================
/***** STC8G1K08-TSSOP20------三合一  *************************

 P1.2   1  OUT_IR_AIM                          20  P1.1
 P1.3   2                                      19  P1.0
 P1.4   3  OUT_PWR_LED                         18  P3.7
 P1.5   4                                      17  P3.6
 P1.6   5                                      16  P3.5
 P1.7   6                                      15  P3.4
 P5.4   7                                      14  P3.3
 VCC    8                                      13  P3.2
 VREF+  9                                      12  P3.1
 GND    10                                     11  P3.0
===================================================================
*/
// 按键输入
#define	IN_KEY1      P32 	// 输入鼠尾开关1 按下开启，抬起关闭，双击开启与关闭切换
#define	IN_KEY2      P33 	// 输入鼠尾开关2 按下开启，抬起关闭，双击开启与关闭切换
#define	IN_KEY3      P36 	// 输入主板按键开关

// 激光输出
#define	OUT_IR_ILL   P11 	// 照明PWM输出
#define	OUT_IR_AIM   P10 	// 激光瞄PWM输出
#define	OUT_GR_AIM   P17 	// 绿激光输出

// LED指示灯输出
#define	OUT_LED_RED      P13 	// 输出(低电平)LED红灯
#define	OUT_LED_GREEN    P12 	// 输出(低电平)LED绿灯

// 照明旋钮输入
#define	IN_ILL_SET_L     P37 	// 输入(k2)照明功率低
#define	IN_ILL_SET_M     P34 	// 输入(k2)照明功率中
#define	IN_ILL_SET_H     P35 	// 输入(k2)照明功率高

// 瞄准旋钮输入
#define	IN_AIM_SET_G     P16 	// 输入瞄准(k3)绿
#define	IN_AIM_SET_L     P30 	// 输入瞄准(k3)激光瞄低
#define	IN_AIM_SET_M     P31 	// 输入瞄准(k3)激光瞄中
#define IN_AIM_SET_H     P14 	// 输入瞄准(k3)激光瞄高



//sbit	lkk				=P1^2; 


//=============== 系统常数定义 =================

//---------电源电压检测----------
#define	ENLVR			0x40	//RSTCFG.6
#define	LVDF			0x20	//PCON.5
#define	LVD2V0			0x00	//低电压2.0V
#define	LVD2V4			0x01	//低电压2.4V
#define	LVD2V7			0x02	//低电压2.7V
#define	LVD3V0			0x03	//低电压3.0V

//---------省电及掉电模式----------
#define	IDL			0x01	//PCON.0省电模式开启
#define	PD			0x02	//PCON.1掉电模式开启

//=============== 定时器常数定义 =================
#define	Timer_CS_L		0x00
#define	Timer_CS_H		0x4C	// 定时常数，11.0592MHz,定时50mS

#define	PWM0_CS_L		0xFE	// 7.35kHz(T0工作在12T下)
#define	PWM0_CS_H		0xFF	 
//#define	PWM0_CS_L		0xFF	// 14.7kHz(T0工作在12T下)
//#define	PWM0_CS_H		0xFF	 
//#define	PWM0_CS_L		0xEE	// 9.6kHz(T0工作在1T下)
//#define	PWM0_CS_H		0xFF



//=============== 常数定义 =================
// #define	ZM_OUT_L		0x2D	// 照亮PWM 低
// #define	ZM_OUT_Z		0x24 	// 照亮PWM 中
// #define	ZM_OUT_G		0x00 	// 照亮PWM 高

// #define	JGM_OUT_L		0x38	// 激光瞄PWM 低(+)
// #define	JGM_OUT_Z		0x30 	// 激光瞄PWM 中
// #define	JGM_OUT_G		0x1F 	// 激光瞄PWM 高

#define	PWM_ILL_LOW		0X60	// 照亮PWM 低

#define	PWM_ILL_MID		0x50 	// 照亮PWM 中
#define	PWM_ILL_HIGH	0x00 	// 照亮PWM 高


#define	PWM_AIM_LOW		0x70	// 激光瞄PWM 低(+)
#define	PWM_AIM_MID		0x60 	// 激光瞄PWM 中
#define	PWM_AIM_HIGH	0x3E 	// 激光瞄PWM 高


typedef enum LED_Color {
    LED_COLOR_OFF = 0,
    LED_COLOR_RED = 1,
    LED_COLOR_GREEN,

} LED_Color_t;

typedef enum powerlevel_ILL {
    LEVEL_ILL_OFF = 0,
    LEVEL_ILL_LOW,
    LEVEL_ILL_MID,
    LEVEL_ILL_HIGH,

} powerlevel_ILL_t;

typedef enum powerlevel_AIM {
    LEVEL_AIM_OFF = 0,
    LEVEL_AIM_GREEN,

    LEVEL_AIM_LOW,
    LEVEL_AIM_MID,
    LEVEL_AIM_HIGH


} powerlevel_AIM_t;

// typedef enum work_Status {

//     STATE_LIGHTING_OFF,          // 关闭状态
//     STATE_LIGHTING_MOMENTARY,     // 点动模式（瞬态）
//     STATE_LIGHTING_LATCHED,       // 常亮模式（持续态）
//     STATE_LIGHTING_GREEN_LATCHED, // 绿光常亮模式（持续态）


// } device_Status_t;

//=============== 变量定义 =================

extern unsigned char switch_1;
extern unsigned KeyNum;
extern unsigned char LastSelectorIll;
extern unsigned char LastSelectorAim;
extern unsigned char LastKey1;
extern unsigned char LastKey2;
extern unsigned char LastKey3;
extern unsigned char CurrentSelectorIll;
extern unsigned char CurrentSelectorAim;
extern unsigned char State_LightingLatched; 
extern unsigned char State_GreenLatched; 
extern unsigned char State_GreenAim;
extern unsigned char State_IRAim;
extern unsigned char State_IRILL;
extern unsigned char State_LED;
extern unsigned int tcountForLED;
extern unsigned int tcountForSleep;



//extern	uchar i,j;
//extern	uchar	ls;			// 临时变量
//extern	float	lsbl;		// 临时变量
//extern	uchar	*index;		// 临时指针1
//extern	ulong	*index_long;// 临时指针2
//extern	float	*index_float;// 临时指针3
extern		uint	key_time;	// 按键时间记录
extern		uint	key_QDtime;	// 按键时间去抖

extern		bit		key_assoil;			// 按键标志 =1按下，=0抬起
extern		uchar 	key1_PressCount;    // 鼠尾按键K1，按下次数计数
extern		uchar 	key2_PressCount;    // 鼠尾按键K2，按下次数计数
extern		uchar 	key3_PressCount;    // K3按键，按下次数计数
extern		uchar 	key1_GN;    // 鼠尾按键K1执行功能，=0无效，=1单击，=2双击，=3长按
extern		uchar 	key2_GN;    // 鼠尾按键K2执行功能，=0无效，=1单击，=2双击，=3长按
extern		uchar 	key3_GN;    // K3按键执行功能，=0无效，=1单击，=2双击，=3长按
extern		long	min_5;		// 5分钟记时

extern		uchar	timer_1s;	// 1秒定时
extern		bit		sx_1s;		// 1秒可刷新标志

//extern		bit		key_assoil;	// 按键标志 =1按下，=0抬起
//extern		bit		Laser_BX; 		// 激光爆闪模式 =0不是，=1是


//extern		uint	ADC5_Value;	//ADC通道5转换值
//extern		uint	 voltage;	// 计算后的电压值

extern		uchar	switch_1;	// 开关
extern		bit		work_ON_OFF;	// 工作状态开关 =0待机状态，=1工作状态
extern		uchar	Led_ON;		// 指示灯状态 =0全灭，=1红灯常亮，=2绿灯常亮，=3红灯闪，=4绿灯闪
extern		bit		GreenJG_OUT_EN;	// 绿激光输出保持，=0可以关闭，=1维持现状
extern		bit		OFF_DW;			// 关闭档位，=0两个旋钮没在关闭档位，=1在
// extern  KEY_T s_KEY[6];


//=============== 函数声明 =======================
void LED_ON(uchar color);
void IR_Ill_Handler(u8 powerlevel);
void IR_Aim_Handler(u8 powerlevel);
void Green_Aim_Handler(u8 greenEnable);
void LasersUpdate_Handler();
void LED_Flashing(u8 color1, u8 color2);//todo
void IO_Init(void);
void StateUpdate(void);


//=============== EEPROM单元定义区 =================

#define eep_switch_1 		0x0000 //记录设备地址
//#define eep_baud_rate 		0x0001 //记录波特率

//#define eep_address 		0x0000 //记录设备地址
//#define eep_baud_rate 		0x0001 //记录波特率





#endif
